目標:串接蝦皮訂單、標籤資訊,目前串接蝦皮 OpenAPI 2.0 版本,串接手冊
串接步驟:
前面幾篇已經取得 access token,接下來就可以來嘗試串接蝦皮資料了
這次會嘗試蝦皮訂單,在取得訂單資料之前,可以先參考一下蝦皮的 API Call Flows
看過 API Call Flows 會更了解蝦皮資料處理的順序跟邏輯

橘色底是訂單的狀態,每個訂單狀態產生的原因都有在旁邊加以說明
其中幾個步驟的內容
1.訂單在確認付款後訂單狀態會由 UNPAID 轉成 READY_TO_SHIP
2.賣家或消費者刪除訂單後訂單狀態會變成 CANCELED; 消費者可以在訂單狀態變成 SHIPPED 之前取消訂單
4.在賣家安排物流後訂單狀態會變成 PROCESSED
5.物流單(託運單)被掃瞄後訂單狀態變成 SHIPPED
6.消費者要求退貨後訂單狀態變成 TO_RETURN
然後正常流程會是經過 1、4、5 這幾步驟,其他的話則是不一定
這個 API 可以讓你帶入需要的參數後取得你想要的訂單單號
| 格式 | HTTP/JSON | 
|---|---|
| URL | • 正式區:https://partner.shopeemobile.com/api/v2/order/get_order_list | 
| • 測試區:https://partner.test-stable.shopeemobile.com/api/v2/order/get_order_list | |
| 請求方式 | GET | 
ps:
公共參數:
| 參數 | 類型 | 說明 | 
|---|---|---|
| sign | string | partner_id、api path、timestamp HMAC-SHA256 編碼,並用 partner key 當作加密 Key (可參授權商店那一篇) | 
| partner_id | int | Create App 產生的 partner_id (可參Create App 那一篇) | 
| timestamp | int | 時間戳,期限 5 min | 
| access_token | string | 期限 4 小時(可參取得 access token 那一篇) | 
| shop_id | int | 商店 ID(可參授權商店那一篇) | 
業務參數:(因為是 GET,所以要帶到 url 的 query)
| 參數 | 類型 | 說明 | 
|---|---|---|
| time_range_field | string | 時間類別:create_time 或 update_time. | 
| time_from | int | 起始時間,起始到結束不能超過 15 天 | 
| time_to | int | 結束時間,起始到結束不能超過 15 天 | 
| page_size | int | 一次 response 的筆數,最多 100 | 
| cursor | string | 超過 1 頁的,下一頁的數 | 
| order_status | string | 訂單狀態:UNPAID/READY_TO_SHIP/PROCESSED/SHIPPED/COMPLETED/IN_CANCEL/CANCELLED/INVOICE_PENDING | 
| response_optional_fields | string | 回應的欄位,不填的話只會回應主要的欄位,其餘的欄位就不會有 | 
以 PHP 為範例
// 取得訂單清單
function getOrderList(
	$host,
	$partnerId,
	$partnerKey,
	$timestamp,
	$access_token,
	$shop_id,
	$cursor,
	$page_size,
	$order_status
){
	$path='/api/v2/order/get_order_list'; 
	$base_string=strval($partnerId.$path.$timestamp.$access_token.$shop_id);
	$sign=hash_hmac('sha256',$base_string,$partnerKey,false);
		
	$time_from=strtotime('2022-05-01 11:00:00');
	$time_to=strtotime('2022-05-12 23:00:00');
	
	$paremeter='&time_range_field=create_time&time_from='.$time_from.'&time_to='.$time_to.'&page_size='.$page_size.'&order_status='.$order_status;
	$url=$host.$path.'?partner_id='.$partnerId.'×tamp='.$timestamp.'&sign='.$sign.'&access_token='.$access_token.'&shop_id='.$shop_id.$paremeter;
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_HTTPHEADER, [
		'Content-Type: application/json'
	]);
	$res = curl_exec($ch);
	return $res;
}
串接完後會有清單的 order_sn,這樣就可以進一步去打 get_order_detail 來取得訂單詳細資料
小提醒:如果 response_optional_fields 沒有帶 order_status 就不會有喔
一開始想說怎麼不給完整的資料,但後來串接 get_order_detail 的時候,發現蠻不錯的耶,只會給你必要的資訊,需要的資訊再自己取得就好,不需要的就可以不用給,就不用接收一大坨的資料
經過前面商店授權、 access token 後就這次串接就相對簡單了,另外我覺得很棒的是蝦皮有提供 API Call Flows 這我覺得蠻不錯的,讓開發者可以很清楚知道實際操作跟 api 之間的關聯性!
參考資料:
API Call Flows
get_order_list